<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>事件总线</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>

</head>
<body>

    
    <div id="app">
        <p>{{msg}}</p>
        <my-one></my-one>
    </div>
    <script>
        // 公共仓库管理msg的状态
        var eventBus = new Vue({
            created() {
                // 为事件总线添加change-msg的事件
                this.$on("change-msg",this.print)
            },
            data:{
                msg:'父组件的msg',
            },    
            methods: {
                print(str){
                    this.msg=str;
                    console.log(this.msg);
                },
            },     
        })
        // 2.子组件的数据不需要通过props进行传递，通过eventBus进行触发总线的change-msg事件，传递的参数在print中接受，通过print修改msg中的值
        Vue.component("my-one",{
            template:`
            <div style="border:1px solid red">
                <p>{{msg}}</p>    
                <button @click="btnClick">修改</button>
            </div>
            `,
            computed:{
                msg(){
                    return eventBus.msg;
                }
            },
            
            methods: {
                btnClick(){
                    // 3.$emit 触发change-msg，调用print方法
                    eventBus.$emit("change-msg","我是子组件修改的")
                }
            },
        })
        // 1.获取msg 直接通过eventBus进行获取
        var app =new Vue({
            el:"#app",
            computed:{
                msg(){
                    return eventBus.msg;
                }
            },
            
        });
    </script>
    
</body>
</html>